#include"types.h"
// struct cpu {
//     uchar apicid;                //管理CPU的中断操作（高级可编程中断控制器）
//     struct context *scheduler;   //上下文切换
//     //struct taskstate ts;         
//     //任务撞他段，用于描述当前任务的堆栈指针、程序计数器以及其他与任务执行相关的状态。
//     //struct segdesc gdt[NSEGS];
//     volatile uint started;       //
//     int ncli;                    // 相当于IF(关中断)
//     int intena;                  // 类似上面的
//     struct proc *proc;           // 当前CPU上运行的程序
//   };

// struct context{
//     //通用寄存器
//     uint edi;//当前任务寄存器的值
//     uint esi;//同上，处理字符串的
//     uint ebx;//存储局部变量和函数的参数
//     //指针寄存器
//     uint ebp;//基指针寄存器，指向当前栈帧底部
//     uint eip;//指向下一条将要执行的指令地址
// };

//进程的6个状态
//enum procstate { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE };

//陷阱帧结构体
struct trapframe {
  uint64 ra;
  uint64 sp;
  uint64 gp;
  uint64 tp;
  uint64 t0;
  uint64 t1;
  uint64 t2;
  uint64 s0;
  uint64 s1;
  uint64 a0;
  uint64 a1;
  uint64 a2;
  uint64 a3;
  uint64 a4;
  uint64 a5;
  uint64 a6;
  uint64 a7;
  uint64 s2;
  uint64 s3;
  uint64 s4;
  uint64 s5;
  uint64 s6;
  uint64 s7;
  uint64 s8;
  uint64 s9;
  uint64 s10;
  uint64 s11;
  uint64 t3;
  uint64 t4;
  uint64 t5;
  uint64 t6;
  uint64 sepc;   // 保存程序计数器（PC）
  uint64 sstatus; // 保存状态寄存器
};

// struct proc {
//     uint sz;                     // 进程内存大小
//     pde_t* pgdir;                // 指向进程页表的指针
//     char *kstack;                // 内核栈栈底指针
//     enum procstate state;        //进程当前状态
//     int pid;                     // PID
//     struct proc *parent;         // 父进程指针
//     struct trapframe *tf;        
//     // 指向当前进程的 陷阱帧（trapframe）的指针。陷阱帧用于保存进程在进入内核态时的寄存器信息
//     //用于上下文切换
//     struct context *context;
//     //指向 struct context 结构体的指针。该结构体保存了进程的上下文信息（如寄存器状态）
//     void *chan;                  // If non-zero, sleeping on chan
//     //指向当前进程等待的通道。进程在睡眠时会等待某个事件或资源的发生
//     int killed;                  // If non-zero, have been killed
//     //用于标记一个进程是否已经被杀死。如果该值为非零值，表示该进程已经被标记为终止状态，操作系统将会在适当的时候回收该进程
//     //struct file *ofile[NOFILE];  // Open files
//     //保存了进程打开的文件描述符。每个文件描述符对应一个 struct file 结构体，它包含了文件的相关信息，如文件指针、文件的状态等
//     struct inode *cwd;           // Current directory
//     char name[16];               // Process name (debugging)
//   };